package com.uco.oop.innerclass;

// lamda表达式，能简化特定的匿名内部类的写法
// 集成与函数式接口的匿名内部类，只有这一种场景

// 需要函数式接口的对象 -> lamda表达式（简化生成匿名类对象） -> 方法引用（继续简化 lamda 表达式，针对单行方法内容，可以忽略）
public class Lamda {
    public static void main(String[] args) {
        Person st = () -> {
            System.out.println("student eat");
        };
        st.eat();

        Person teacher = () -> System.out.println("teacher eat");

        // 如果有合适的场景，方法引用能够继续简化 lamda 表达式
        // 静态方法引用
        Person worker = Worker::eat;

        // 实例方法引用
        Farmer farmer = new Farmer();
        Person farmer2 = farmer::eat;
    }


}

// 函数式接口
@FunctionalInterface
interface Person {
    public abstract void eat();
}


class Worker {
    public static void eat() {
        System.out.println("worker eat");
    }
}

class Farmer {
    public void eat() {
        System.out.println("farmer eat");
    }
}